import datetime
from typing import Union, List

from pydantic import BaseModel, Field
from starlette import status

"""
Pydantic 模型
当从 API 返回数据时、将在读取数据时使用的Pydantic模型
"""


# 修改文件 dto
class UpdateFileDto(BaseModel):
    uuid: str
    new_name: str
    old_name: str


# 删除文件
class DeleteFileDto(BaseModel):
    uuid: str
    name: str


# 查询文件 dto
class SelectFileDto(BaseModel):
    current: int = 0  # 起始页
    size: int = 20  # 查询数量
    condition: Union[str, None] = Field(default=None, title="查询条件")
    query: Union[str, None] = Field(default=None, title="查询值")


# 文件列表展示 vo
class FileVo(BaseModel):
    uuid: str  # 用于删除、修改
    name: str  # 文件名展示
    url: str  # 下载和预览
    size: int  # 大小展示
    # update_time: datetime.datetime  # 时间展示并逆序排序
    update_stamp: int  # pydantic 没有 timestamp 类型，将 timestamp 转换为 int 输出


# 文件列表展示 vo
class FileVo2(BaseModel):
    uuid: str  # 用于删除、修改
    name: str  # 文件名展示
    url: str  # 下载和预览
    size: int  # 大小展示
    update_time: datetime.datetime  # 实践展示并逆序排序


class FilePage(BaseModel):
    files: List[FileVo]  # 文件列表
    total: int  # 返回的文件总数
    current: int  # 当前页
    size: int  # 分页大小


# 统一响应
class Response(BaseModel):
    code: int
    message: str
    data: object = None


class Fail(Response):
    code: int
    message: str
    data: object = None


class Success(Response):
    code: int = status.HTTP_200_OK
    message: str = "Success"
    data: object = None
